package mine.code.question.哈希;

import org.junit.Test;

/**
 * 你在和朋友一起玩 猜数字（Bulls and Cows）游戏，该游戏规则如下：
 * <p>
 * 你写出一个秘密数字，并请朋友猜这个数字是多少。
 * 朋友每猜测一次，你就会给他一个提示，告诉他的猜测数字中有多少位属于数字和确切位置都猜对了（称为“Bulls”, 公牛），有多少位属于数字猜对了但是位置不对（称为“Cows”, 奶牛）。
 * 朋友根据提示继续猜，直到猜出秘密数字。
 * 请写出一个根据秘密数字和朋友的猜测数返回提示的函数，返回字符串的格式为 xAyB ，x 和 y 都是数字，A 表示公牛，用B表示奶牛。
 * <p>
 * xA 表示有 x 位数字出现在秘密数字中，且位置都与秘密数字一致。
 * yB 表示有 y 位数字出现在秘密数字中，但位置与秘密数字不一致。
 * 请注意秘密数字和朋友的猜测数都可能含有重复数字，每位数字只能统计一次。
 * <p>
 * 示例 1:
 * <p>
 * 输入: secret = "1807", guess = "7810"
 * 输出: "1A3B"
 * 解释: 1公牛和3奶牛。公牛是 8，奶牛是 0, 1和 7。
 *
 * @author caijinnan
 */
public class 猜数字游戏 {

    @Test
    public void run() {
        // 1133
        // 3303
        // "00112233445566778899"
        //"16872590340158679432"
        String secret = "1122";
        String guess = "1222";
        System.out.println(getHint(secret, guess));
    }

    public String getHint(String secret, String guess) {
        int[] numArr = new int[10];
        for (char c : secret.toCharArray()) {
            numArr[c % '0'] = numArr[c % '0'] + 1;
        }
        int i = 0;
        int all = 0;
        int aNum = 0;
        for (char c : guess.toCharArray()) {
            int num = c % '0';
            if(guess.charAt(i)==secret.charAt(i)){
                aNum++;
            }
            if (numArr[num]>0) {
                all++;
                numArr[num] = numArr[num] - 1;
            }
            i++;
        }

        int bNum = all - aNum;
        return aNum + "A" + bNum + "B";
    }
}
